﻿using System;
using System.Collections.Generic;
using System.Text;
using BussinessLogicTecnoPez;
using Microsoft.Practices.EnterpriseLibrary.Validation.Validators;
using BussinessLogicTecnoPez.Produccion.Clasificacion_e_Incubacion;
using BussinessLogicTecnoPez.Produccion.Enfermedades_y_control_de_estanques;

namespace BussinessLogicTecnoPez.Produccion.Producto
{
    [Serializable]
    [DBTable("PRODUCTOS")]
    public class Producto : EntityBase<Producto>
    {
        private int idProducto;
        private string nombre;
        private decimal precioMinorista;
        private decimal precioMayorista;
        private string codigo;
        private string descripcion;
        private Especie objEspecie;
        private UnidadMedida objUnidadMedida;

        [DBField("IDPRODUCTO",true,true)]
        [FriendlyName("Producto",false)]
        public int IdProducto
        {
            get { return idProducto; }
            set { idProducto = value; }
        }

        [NotNullValidator(MessageTemplate = "Código: Debe tener algun valor.")]
        [StringLengthValidator(0, 10, MessageTemplate = "Código: Tamaño máximo es de 10 carateres.")]
        [TecnoPezNoEmptyStringValidator("Código: Debe tener algun valor.")]
        [DBField("CODIGO", false, false)]
        [FriendlyName("Codigo", true, true, FriendlyName.FilterType.String)]
        public string Codigo
        {
            get { return codigo; }
            set { codigo = value; }
        }

        [NotNullValidator(MessageTemplate = "Nombre: Debe tener algun valor.")]
        [StringLengthValidator(0, 30, MessageTemplate = "Nombre: Tamaño máximo es de 30 carateres.")]
        [TecnoPezNoEmptyStringValidator("Nombre: Debe tener algun valor.")]
        [DBField("NOMBRE", false, false)]
        [FriendlyName("Nombre", true, true, FriendlyName.FilterType.String)]
        public string Nombre
        {
            get { return nombre; }
            set { nombre = value; }
        }

        [DBField("DESCRIPCION", false, false)]
        [FriendlyName("Descripción", false)]
        public string Descripcion
        {
            get { return descripcion; }
            set { descripcion = value; }
        }        

        [DBField("PRECIOMINORISTA", false, false)]
        [FriendlyName("Precio Minorista", true)]
        public decimal PrecioMinorista
        {
            get { return precioMinorista; }
            set { precioMinorista = value; }
        }

        [DBField("PRECIOMAYORISTA", false, false)]
        [FriendlyName("Precio Mayorista", true)]
        public decimal PrecioMayorista
        {
            get { return precioMayorista; }
            set { precioMayorista = value; }
        }

        [DBField("IDESPECIE", false, false, true, "IDESPECIE")]
        [FriendlyName("Especie", true)]
        public Especie Especie
        {
            get { return objEspecie; }
            set { objEspecie = value; }
        }

        [NotNullValidator(MessageTemplate = "Unidad de medida: Debe tener algun valor.")]
        [DBField("IDUNIDADMEDIDA", false, false, true, "IDUNIDADMEDIDA")]
        [FriendlyName("Unidad de medida", true)]
        public UnidadMedida UnidadMedida
        {
            get { return objUnidadMedida; }
            set { objUnidadMedida = value; }
        }

        public override string ToString()
        {
            return this.Nombre.Trim() + " (" + this.UnidadMedida.ToString() + ")";
        }
    }
}
